package com.xxxtea.config.converter;

import cn.hutool.core.util.DesensitizedUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 敏感信息序列化处理器
 * 
 * 用于在JSON序列化时对用户敏感信息（如姓名、手机号、邮箱）进行脱敏处理。
 * 根据字段名自动选择合适的脱敏方式，提升数据安全性。
 * 
 * @author badman
 * @since 1.0.0
 */
public class SensitiveSerializer extends JsonSerializer<String> {

	/**
	 * 序列化方法，对敏感字段进行脱敏处理
	 * 
	 * @param value 字段值
	 * @param gen JSON生成器
	 * @param serializers 序列化器
	 * @throws IOException IO异常
	 */
	@Override
	public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
		if (value == null) {
			gen.writeNull();
			return;
		}

		// 获取当前字段名，根据字段类型选择脱敏方式
		String fieldName = gen.getOutputContext().getCurrentName();
		switch (fieldName) {
			case "name":
				gen.writeString(DesensitizedUtil.chineseName(value));
				break;
			case "phone":
				gen.writeString(DesensitizedUtil.mobilePhone(value));
				break;
			case "email":
				gen.writeString(DesensitizedUtil.email(value));
				break;
		}
	}
}